package com.yuanfeng.order.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanfeng.commoms.dto.PageUserTokenBeanDTO;
import com.yuanfeng.commoms.dto.job.ShopSettleAccountInfoDTO;
import com.yuanfeng.order.dto.FinancialSettlementDTO;
import com.yuanfeng.order.dto.WaitOrderDTO;
import com.yuanfeng.order.entity.OrderSettlementEntity;
import com.yuanfeng.order.vo.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @Entity com.yuanfeng.order.entity.OrderSettlement
 */
@Mapper
public interface OrderSettlementMapper extends BaseMapper<OrderSettlementEntity> {

    /**
     *商家提现未提现金额查询
     * @param param
     * @return
     */
    List<FinancialSettlementDTO> getMerchantAmountExp(@Param("param") FinancialSettlementDTO param);

    /**
     * 分页查询结算业务
     * @param page
     * @param paraMap
     * @return
     */
    IPage<OrderSettlementVO> businessList(Page<OrderSettlementVO> page,@Param("paraMap") Map<String, String> paraMap);

    /**
     * 查询结算业务列表
     * @param paraMap
     * @return
     */
    List<OrderSettlementVO> exportexcelSettlementBusiness(@Param("paraMap") Map<String, String> paraMap);

    /**
     * 查询结算详情
     * @param paraMap
     * @return
     */
    OrderSettlementVO settlementDetail(@Param("paraMap") Map<String, String> paraMap);

    /**
     * 获取结算时间
     * @param paraMap
     * @return
     */
    OrderSettlementVO getSettlementDate(@Param("paraMap") Map<String, Object> paraMap);

    /**
     * 分页查询基础订单信息
     * @param page
     * @param paraMap
     * @return
     */
    IPage<OrderBaseInfoVO>listSupplyBaseInfo(IPage<OrderBaseInfoVO> page,@Param("paraMap") Map<String, Object> paraMap);

    /**
     * 分页查询基础订单信息
     * @param page
     * @param paraMap
     * @return
     */
    IPage<OrderBaseInfoVO> listBaseInfo2(IPage<OrderBaseInfoVO> page,@Param("paraMap") Map<String, Object> paraMap);

    /**
     * 分页查询基础订单信息
     * @param page
     * @param paraMap
     * @return
     */
    IPage<OrderBaseInfoVO> listDealerBaseInfo(IPage<OrderBaseInfoVO> page,@Param("paraMap") Map<String, Object> paraMap);

    /**
     * 分页查询基础订单信息
     * @param page
     * @param paraMap
     * @return
     */
    IPage<OrderBaseInfoVO> listBaseInfo(IPage<OrderBaseInfoVO> page,@Param("paraMap") Map<String, Object> paraMap);

    /**
     * 分页查询返回订单详情信息
     * @param page
     * @param paraMap
     * @return
     */
    IPage<ReturnOrderDetailListVO> listSupplyReutrnOrder(IPage<ReturnOrderDetailListVO> page,@Param("paraMap") Map<String, Object> paraMap);

    /**
     * 分页查询返回订单详情信息
     * @param page
     * @param paraMap
     * @return
     */
    IPage<ReturnOrderDetailListVO> listReutrnOrder2(IPage<ReturnOrderDetailListVO> page,@Param("paraMap") Map<String, Object> paraMap);

    /**
     * 分页查询返回订单详情信息
     * @param page
     * @param paraMap
     * @return
     */
    IPage<ReturnOrderDetailListVO> listDealerReutrnOrder(IPage<ReturnOrderDetailListVO> page,@Param("paraMap") Map<String, Object> paraMap);

    /**
     * 分页查询返回订单详情信息
     * @param page
     * @param paraMap
     * @return
     */
    IPage<ReturnOrderDetailListVO> listReutrnOrder(IPage<ReturnOrderDetailListVO> page,@Param("paraMap") Map<String, Object> paraMap);

    /**
     * 查询供应商基本信息导出
     * @param paraMap
     * @return
     */
    List<OrderBaseInfoVO> listSupplyBaseInfoExport(@Param("paraMap") Map<String, Object> paraMap);

    /**
     * 查询基本信息导出
     * @param paraMap
     * @return
     */
    List<OrderBaseInfoVO> listBaseInfoExport(@Param("paraMap") Map<String, Object> paraMap);

    /**
     * 查询供应商回收订单导出
     * @param paraMap
     * @return
     */
    List<ReturnOrderDetailListVO> listSupplyReutrnOrderExport(@Param("paraMap") Map<String, Object> paraMap);

    /**
     * 查询返回订单导出
     * @param paraMap
     * @return
     */
    List<ReturnOrderDetailListVO> listReutrnOrderExport(@Param("paraMap") Map<String, Object> paraMap);

    /**
     * 获取时间
     * @param shopId
     * @param osOrderType
     * @return
     */
    Date getBeformDate(@Param("shopId") String shopId,@Param("osOrderType") Integer osOrderType);

    /**
     * 获取结算账户订单
     * @param shopId
     * @param dropShipping
     * @param dBefore
     * @return
     */
    ShopSettleAccountInfoDTO getSettleAccountOrder(@Param("shopId") String shopId,@Param("dropShipping") Integer dropShipping,@Param("dBefore") Date dBefore);

    /**
     * 获取结算账户返回
     * @param shopId
     * @param dropShipping
     * @param dBefore
     * @return
     */
    ShopSettleAccountInfoDTO getSettleAccountReturn(@Param("shopId") String shopId,@Param("dropShipping") Integer dropShipping,@Param("dBefore") Date dBefore);

    /**
     * 获取金额
     * @param shopId
     * @return
     */
    Double getFineMoneyByShopId(@Param("shopId") String shopId);

    /**
     * 分页查询等待订单列表
     * @param page
     * @param param
     * @param dBefore
     */
    IPage<OrderBaseListVO> selectWaitOrderList(Page<OrderBaseListVO> page, @Param("param") WaitOrderDTO param, @Param("dBefore") Date dBefore);

    /**
     * 分页查询等待罚款列表
     * @param page
     * @param param
     * @return
     */
    IPage<FineBaseListVO> selectWaitFineList(Page<FineBaseListVO> page,@Param("param") PageUserTokenBeanDTO param);

    /**
     * 分页查询等待返回列表
     * @param page
     * @param param
     * @param dBefore
     * @param dropShipping
     * @return
     */
    IPage<ReturnBaseListVO> selectWaitReturnList(Page<ReturnBaseListVO> page,@Param("param") WaitOrderDTO param,
                                                 @Param("dBefore") Date dBefore,@Param("dropShipping") Integer dropShipping);

    /**
     * 商家等待结算对应退款列表
     * @param param
     * @return
     */
    IPage<ReturnBaseListVO> selectWaitDealerReturnList(IPage<FinancialSettlementDTO> page,@Param("shopId") String shopId, @Param("param")WaitOrderDTO param, @Param("dBefore")Date dBefore);

    /**
     * 商家等待结算对应对账单 订单列表
     */
    IPage<OrderBaseListVO> selectWaitDealerOrderList(IPage<FinancialSettlementDTO> page, @Param("param")WaitOrderDTO param, @Param("dBefore")Date dBefore);


    /**
     * 商家提现未提现金额查询
     * @param param
     * @return
     */
    IPage<FinancialSettlementDTO> getMerchantAmount(IPage<FinancialSettlementDTO> page , @Param("param") FinancialSettlementDTO param);


    /**
     * 更改结算单信息
     *
     * @param map
     * @return
     */
    Integer updateOrderSettlementByMap(@Param("param") Map<String, Object> map);


    /**
     * 分页查询平台表单列表结算
     *
     * @param page
     * @param map
     * @return
     */
    IPage<PlatFormOrderSettlementVO> queryPlatFormListSettlement(IPage<PlatFormOrderSettlementVO> page, @Param("refundMap") Map<String, Object> map);


    /**
     * 查询平台表单列表结算Excel
     *
     * @param map
     * @return
     */
    List<PlatFormOrderSettlementVO> queryPlatFormListSettlementExcel(@Param("refundMap") Map<String, Object> map);

    /**
     * 供应商 对账单 退单列表
     * @param page
     * @param shopId
     * @param dBefore
     * @return
     */
    IPage<ReturnBaseListVO> selectSupplyWaitReturnList(Page<ReturnBaseListVO> page, @Param("shopId") String shopId, @Param("dBefore") Date dBefore);

    /**
     * 供应商中心未结算业绩订单查询
     * @param page
     * @param shopId
     * @param dBefore
     * @return
     */
    IPage<OrderBaseListVO> selectSupplyWaitOrderList(Page<OrderBaseListVO> page, @Param("shopId")String shopId, @Param("dBefore")Date dBefore);

    /**
     * 获取单个店铺所有未结算的经销订单金额
     * @param shopId
     * @param dBefore
     * @return
     */
    ShopSettleAccountInfoDTO getSupplySettleAccountOrder(@Param("shopId") String shopId, @Param("dBefore") Date dBefore);

    /**
     * 获取单个店铺所有未结算的退单金额
     * @param shopId
     * @param dBefore
     * @return
     */
    ShopSettleAccountInfoDTO getSupplySettleAccountReturn(@Param("shopId")String shopId, @Param("dBefore")Date dBefore);


    /**
     * 获取单个店铺所有未结算的经销订单金额
     * @param shopId
     * @param dBefore
     * @return
     */
    ShopSettleAccountInfoDTO getSettleDealerAccountOrder(@Param("shopId") Integer shopId, @Param("dBefore") Date dBefore);


    /**
     * 获取单个店铺所有未结算的退单金额
     * @param shopId
     * @param dBefore
     * @return
     */
    ShopSettleAccountInfoDTO getSettleDealerAccountReturn(@Param("shopId") Integer shopId, @Param("dBefore") Date dBefore);


    /**
     * 更改结算状态
     *
     * @param settlementId
     * @param shopId
     */
    void updateSettlementOrder(String settlementId, Integer shopId);


}




